<html>
    <head>
        <title>使用Razor页面创建插件</title>
    </head>
    <body>
        <script>
             /*
                        四、使用Razor页面创建插件

                                创建带有内部视图的插件需要更多的关注。

                                此示例假设你已使用应用程序启动模板和MVC/Razor Pages UI创建了一个新的Web应用程序。

                                在解决方案中创建一个新的类库项目：

                                编辑.csproj文件内容：

                                                <Project Sdk="Microsoft.NET.Sdk.Web">
                                                    <PropertyGroup>
                                                        <TargetFramework>net5.0</TargetFramework>
                                                        <OutputType>Library</OutputType>
                                                        <IsPackable>true</IsPackable>
                                                    </PropertyGroup>

                                                    <ItemGroup>
                                                    <PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared" Version="4.0.1" />
                                                    </ItemGroup>
                                                </Project>

                                        将Sdk更改为Microsoft.NET.Sdk.Web。

                                        添加了OutputType和IsPackable属性。

                                        添加了Volo.Abp.AspNetCore.Mvc.UI.Theme.SharedNuGet包。
                                        
                                        备注:

                                            根据Volo.Abp.AspNetCore.Mvc.UI.Thame.Shared包是不需要的。

                                            你可以引用更基本的包，如Volo.Abp.AspNetCore.Mvc。

                                            但是，如果你将构建一个UI页面/组件，建议引用Volo.Abp.AspNetCore.Mvc.UI.Thame.Shared包，因为它是最高级的包，不依赖于特定的主题。

                                            如果依赖于特定主题没有问题，你可以直接引用主题的包，以便能够在插件中使用特定于主题的功能。

                                    然后在插件中创建你的模块类：

                                                using System.IO;
                                                using System.Reflection;
                                                using Microsoft.AspNetCore.Mvc.ApplicationParts;
                                                using Microsoft.Extensions.DependencyInjection;
                                                using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared;
                                                using Volo.Abp.Modularity;

                                                namespace MyMvcUIPlugIn
                                                {
                                                    [DependsOn(typeof(AbpAspNetCoreMvcUiThemeSharedModule))]
                                                    public class MyMvcUIPlugInModule : AbpModule
                                                    {
                                                        public override void PreConfigureServices(ServiceConfigurationContext context)
                                                        {
                                                            PreConfigure<IMvcBuilder>(mvcBuilder =>
                                                            {
                                                                //Add plugin assembly
                                                                mvcBuilder.PartManager.ApplicationParts.Add(new AssemblyPart(typeof(MyMvcUIPlugInModule).Assembly));

                                                                //Add CompiledRazorAssemblyPart if the PlugIn module contains razor views.
                                                                mvcBuilder.PartManager.ApplicationParts.Add(new CompiledRazorAssemblyPart(typeof(MyMvcUIPlugInModule).Assembly));
                                                            });
                                                        }
                                                    }
                                                }

                                                取决于AbpAspNetCoreMvcUiThemeSharedModule，因为我们添加了相关的NuGet包。

                                                将插件程序集作为AssemblyPart和CompiledRazorAssemblyPart添加到ASP.NETCore MVC的PartManager。
                                                这是ASP.NET核心所必需的。否则，插件内的控制器或视图将无法工作。


                                            你现在可以在Pages文件夹中添加剃刀页面，例如MyPlugInPage.cshtml：
                                                 
                                                    @page
                                                        @model MyMvcUIPlugIn.Pages.MyPlugInPage
                                                        <h1>Welcome to my plug-in page</h1>
                                                        <p>This page is located inside a plug-in module! :)</p>


                                        现在，你可以构建插件项目了。它将产生以下输出：


                                        将MyMvcUIPlugIn.dll复制到插件文件夹中（D:\Temp\MyPlugIns对于本例）。

                                        如果你已经像上面描述的那样配置了主应用程序（请参阅基本用法部分），你应该能够在你的应用程序：
                    */
        </script>
    </body>
</html>